package org.gbif.ipt.config; import org.gbif.ipt.config.JdbcSupport.JdbcInfo; import org.gbif.ipt.config.JdbcSupport.LIMIT_TYPE; import org.junit.Test; import static org.junit.Assert.assertEquals; public class JdbcInfoTest { @Test public void testSql() { JdbcSupport support = new JdbcSupport(); JdbcInfo info = support.new JdbcInfo("mysql", "MySQL", "com.mysql.jdbc.Driver", "jdbc:mysql://{host}/{database}", LIMIT_TYPE.LIMIT); assertEquals("Select * from specimen LIMIT 10", info.addLimit("Select * from specimen", 10)); assertEquals( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true LIMIT 10", info.addLimit( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true limit 100000", 10)); assertEquals( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true group by fake LIMIT 10", info.addLimit( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true group by fake", 10)); assertEquals("select * from specimen union select * from observation LIMIT 10", info.addLimit("select * from specimen union select * from observation", 10)); assertEquals("select * from specimen where country in (select country from countries where public=true) LIMIT 10", info.addLimit("select * from specimen where country in (select country from countries where public=true)", 10)); info = support.new JdbcInfo("mysql", "MySQL", "com.mysql.jdbc.Driver", "jdbc:mysql://{host}/{database}", LIMIT_TYPE.TOP); assertEquals(" SELECT TOP 10 * from specimen", info.addLimit("Select * from specimen", 10)); assertEquals(" SELECT TOP 10 * from specimen union SELECT TOP 10 * from observation", info.addLimit("select * from specimen union select * from observation", 10)); assertEquals( " SELECT TOP 10 s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true", info.addLimit( " SELECT top 23415 s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true", 10)); assertEquals( " SELECT TOP 10 s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true group by fake", info.addLimit( " SELECT top 100000 s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE s.public=true group by fake", 10)); info = support.new JdbcInfo("mysql", "MySQL", "com.mysql.jdbc.Driver", "jdbc:mysql://{host}/{database}", LIMIT_TYPE.ROWNUM); assertEquals("Select * from specimen WHERE rownum <= 10", info.addLimit("Select * from specimen", 10)); assertEquals("Select * from specimen WHERE rownum <= 10 AND s.public=true", info.addLimit("Select * from specimen where s.public=true", 10)); assertEquals("Select * from specimen Where rownum <= 10 and s.public=true group by fake", info.addLimit("Select * from specimen Where ROWNUM<=99 and s.public=true group by fake", 10)); assertEquals("Select * from specimen where rownum <= 10 and s.public=true group by fake", info.addLimit("Select * from specimen where ROWNUM <= 99 and s.public=true group by fake", 10)); assertEquals("Select * from specimen WHERE rownum <= 10 and s.public=true group by fake", info.addLimit("Select * from specimen WHERE ROWNUM <= 99 and s.public=true group by fake", 10)); assertEquals( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id WHERE rownum <= 10 AND s.public=true", info.addLimit( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id where s.public=true", 10)); assertEquals( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id Where rownum <= 10 and s.public=true group by fake", info.addLimit( " SELECT s.id,sciname,genus,lat,lon from specimen s join location l on s.location_fk=l.id Where ROWNUM <= 10 and s.public=true group by fake", 10)); } }